package com.weixing.mall.provider.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.weixing.mall.provider.model.query.*;
import com.weixing.mall.provider.model.vo.OrderShowVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 0202
 * @date 2020-5-29
 */
public interface ILeaderReportService {
    /**
     * 领导看板数据统计
     * 销售汇总
     * @param startTime
     * @param endTime
     * @return 销售数量、销售金额、库存数量、发货数量、客服审单数、代理商数量
     */
    Map<String,Object> indexDataTotal(String startTime,String endTime);

    /**
     * 销售额环比(年)
     * @return
     */
    Map<String,Object> getSaleHb();

    /**
     * 销售额环比（月）
     * @return
     */
    Map<String,Object> getSaleTb();

    /**
     * 专区销售分布
     * @return  name = partitionName  , data = saleAmount
     */
    List<Map<String,Object>> getZqList(String startTime, String endTime);

    /**
     * 活动销售分布
     * @return name = actName  , data = saleAmount   actType  活动类型  代理商  秒杀
     */
    List<Map<String,Object>> getActivityList(String startTime,String endTime,Integer actType);

    /**
     * 库存报表-库存统计
     */
    Map<String,Object> getStockReport(LeaderStockQuery leaderStockQuery);

    /**
     * 库存报表-库存列表统计
     */
    IPage<Map<String,Object>>  getStockList(Page page,LeaderStockQuery leaderStockQuery);

    /**
     * 财务报表-销售统计
     * @param startTime
     * @param endTime
     * @return
     */
    Map<String,Object> getReportForFinancial(String startTime,String endTime);

    /**
     * 财务报表-商品分类销售额TOP5
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String,Object>> categorySaleTop5(String startTime,String endTime);

    /**
     * 财务报表-商品销售额TOP5
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String,Object>> goodsSaleTop5(String startTime,String endTime);

    /**
     * 财务报表-区域销售top10：省份
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String,Object>> provinceSaleTop10(String startTime,String endTime);

    /**
     * 财务报表-区域销售top10：城市
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String,Object>> citySaleTop10(String startTime,String endTime);

    /**
     * 财务报表-区域销售列表:
     * @param page
     * @param startTime
     * @param endTime
     * @param cityName
     * @return
     */
    IPage<Map<String,Object>> areaSaleList(Page page, String startTime, String endTime, String cityName);

    /**
     * 发货报表-发货数据统计
     * @param startTime
     * @param endTime
     * @return
     */
    Map<String,Object> getReportForShipped(String startTime,String endTime);

    /**
     * 发货报表-折线图展示发货数量统计
     * @param startTime
     * @param endTime
     * @return  name = 月份  data = 数量
     */
    List<Map<String,Object>> shippedChartTotalList(String startTime,String endTime);
    /**
     * 发货报表-折线图展示断货数量统计
     * @param startTime
     * @param endTime
     * @return name = 月份  data = 数量
     */
    List<Map<String,Object>> outStockChartTotalList(String startTime,String endTime);
    /**
     * 发货报表-折线图展示退货数量统计
     * @param startTime
     * @param endTime
     * @return name = 月份  data = 数量
     */
    List<Map<String,Object>> refundedChartTotalList(String startTime,String endTime);
    /**
     * 发货报表-折线图展示取消数量统计
     * @param startTime
     * @param endTime
     * @return name = 月份  data = 数量
     */
    List<Map<String,Object>> canceledChartTotalList(String startTime,String endTime);

    /**
     * 发货报表-柱状图展示发货员分区订单数统计
     * @param startTime
     * @param endTime
     * @return shipperName，partitionName，orderNum
     */
    Map<String, Object>  shipperPartitionChartTotalList(String startTime,String endTime);

    /**
     * 发货报表-订单统计
     * @param startTime
     * @param endTime
     * @return shipperName，orderAmount，orderNum
     */
    IPage<Map<String,Object>>  shipperTotalList(Page page,String startTime,String endTime);

    /**
     * 客服报表- 报表数据统计
     */
    Map<String, Object> getKeFuReport(Long customerId,String startTime,String endTime);

    /**
     * 发货报表-客服有效销售额统计列表
     */
    List<Map<String,Object>> kefuSaleAmountTotalList(String startTime,String endTime);

    /**
     * 代理商报表-代理商综合统计
     * @return
     */
    Map<String,Object> getAgentReport();

    /**
     * 代理商报表-等级分布统计
     */
    List<Map<String,Object>> agentLevelDistribution();

    /**
     * 代理商报表-代理商销售统计列表
     */
    List<Map<String,Object>> getAgentSaleList(String startTime,String endTime);

    /**
     * 代理商报表-团队销售统计列表
     */
    List<Map<String,Object>> getTeamSaleList(String startTime,String endTime);

    /**
     * 代理商报表-地区分布统计列表
     */
    List<Map<String,Object>> getAgentAreaList();

    /**
     * 会员报表-会员统计列表:
     * @param page
     * @return
     */
    IPage<Map<String,Object>> getMemberReport(Page page, LeaderMemberQuery leaderMemberQuery);

    /**
     * 会员报表-会员统计列表:
     * @param page
     * @return
     */
    IPage<Map<String,Object>> getBuyReport(Page page, LeaderMemberQuery leaderMemberQuery);

    /**
     * 商品报表-商品销售TOP20
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String,Object>> getGoodsSaleListTop20(String startTime,String endTime);
    /**
     * 商品报表-商品销售列表
     * @param page
     * @param leaderGoodsQuery
     * @return
     */
    IPage<Map<String,Object>> getGoodsSaleList(Page page, LeaderGoodsQuery leaderGoodsQuery);

    /**
     * 商品报表-商品SKU销售列表
     * @param leaderGoodsQuery
     * @return
     */
    List<Map<String,Object>> getSaleSKuList( LeaderGoodsQuery leaderGoodsQuery);

    /**
     * 销售报表-销售统计
     */
    Map<String,Object> getSaleReport(LeaderSaleQuery leaderSaleQuery);

    /**
     * 销售报表-个人销售统计列表
     * @param page
     * @param leaderSaleQuery
     * @return
     */
    IPage<Map<String,Object>> personalSaleReportList(Page page, LeaderSaleQuery leaderSaleQuery);

    /**
     * 销售报表-团队销售统计列表
     * @param page
     * @param leaderSaleQuery
     * @return
     */
    IPage<Map<String,Object>> teamSaleReportList(Page page, LeaderSaleQuery leaderSaleQuery);

    /**
     * 销售报表下探订单列表
     * @param initMpPage
     * @param leaderSaleQuery
     * @return
     */
    IPage<OrderShowVo> saleReportOrderList(Page initMpPage, LeaderSaleOrderListQuery leaderSaleQuery);

    /**
     * 库存SKU列表
     * @param lsq
     * @return
     */
    List<Map<String,Object>> getStockSkuList( @Param("qs")LeaderStockQuery lsq);

    /**
     * 查询活动列表
     * @return
     */
    List<Map<String,Object>>  actList(Integer type);

    IPage<Map<String,Object>> teamList(Page initMpPage,LeaderAgentQuery leaderAgentQuery);

    IPage<Map<String,Object>>  agentRenewList(Page initMPage, LeaderAgentReNewQuery agentQuery);

    IPage<Map<String,Object>>  getBuyList(Page initMpPage, LeaderMemberQuery leaderMemberQuery);

    List<Map<String,Object>> getSaleFxList();

    List<Map<String,Object>> adsLabel();

    List<Map<String,Object>>  orderSaleListForLeader(Page initMpPage,LeaderShowOrderQuery leaderShowOrderQuery);
}
